package handler

import (
	"context"
	"strconv"

	"gitee.com/jn-shao/common"

	"svcSrv/domain/model"
	"svcSrv/domain/service"
	Svc "svcSrv/proto/svcSrv"
)

type SvcHandler struct {
	//注意这里的类型是 ISvcDataService 接口类型
	SvcDataService service.ISvcDataService
}

// 添加创建 Svc
func (e *SvcHandler) AddSvc(ctx context.Context, info *Svc.SvcInfo, rsp *Svc.Response) error {
	common.Info("添加Service")
	SvcModel := &model.Svc{}
	if err := common.SwapTo(info, SvcModel); err != nil {
		common.Error(err)
		rsp.Msg = err.Error()
		return err
	}
	if err := e.SvcDataService.CreateToK8s(info); err != nil {
		common.Error(err)
		rsp.Msg = err.Error()
		return err
	} else {
		//操作数据库写入数据
		SvcID, err := e.SvcDataService.AddSvc(SvcModel)
		if err != nil {
			common.Error(err)
			rsp.Msg = err.Error()
			return err
		}
		common.Info("Service 添加成功数据库ID号为：" + strconv.FormatInt(SvcID, 10))
		rsp.Msg = "Service 添加成功数据库ID号为：" + strconv.FormatInt(SvcID, 10)
	}

	return nil
}

// 删除 Svc
func (e *SvcHandler) DeleteSvc(ctx context.Context, req *Svc.SvcId, rsp *Svc.Response) error {
	//先查找数据
	svcModel, err := e.SvcDataService.FindSvcByID(req.Id)
	if err != nil {
		common.Error(err)
		return err
	}
	if err := e.SvcDataService.DeleteFromK8s(svcModel); err != nil {
		common.Error(err)
		return err
	} else {
		if err := e.SvcDataService.DeleteSvc(req.Id); err != nil {
			common.Error(err)
			return err
		}
		common.Info("删除Service ID：" + strconv.FormatInt(req.Id, 10))
	}
	return nil
}

// 更新指定的 Svc
func (e *SvcHandler) UpdateSvc(ctx context.Context, req *Svc.SvcInfo, rsp *Svc.Response) error {
	svcMode := &model.Svc{}
	if err := common.SwapTo(req, svcMode); err != nil {
		common.Error(err)
		rsp.Msg = err.Error()
		return err
	}
	//先更新k8s中的Svc信息
	if err := e.SvcDataService.UpdateToK8s(req); err != nil {
		common.Error(err)
		rsp.Msg = err.Error()
		return err
	} else {
		if err := e.SvcDataService.UpdateSvc(svcMode); err != nil {
			common.Error(err)
			rsp.Msg = err.Error()
			return err
		}
		common.Info("更新Service ID：" + strconv.FormatInt(req.Id, 10))
	}

	return nil
}

// 查询单个信息
func (e *SvcHandler) FindSvcByID(ctx context.Context, req *Svc.SvcId, rsp *Svc.SvcInfo) error {
	//查询Svc数据
	svcModel, err := e.SvcDataService.FindSvcByID(req.Id)
	if err != nil {
		common.Error(err)
		return err
	}
	err = common.SwapTo(svcModel, rsp)
	if err != nil {
		common.Error(err)
		return err
	}
	return nil
}

// 查询所有 Svc
func (e *SvcHandler) FindSvcList(ctx context.Context, req *Svc.FindSvc, rsp *Svc.SvcList) error {
	//查询所有Svc
	page := &model.Page{Pages: req.Pages, PagePerNums: req.PagePerNums}
	total, svcList, err := e.SvcDataService.FindSvcList(page)
	if err != nil {
		common.Error(err)
		return err
	}

	rsp.Total = total
	//整理格式
	for _, v := range svcList {
		svcInfo := &Svc.SvcInfo{}
		err := common.SwapTo(v, svcInfo)
		if err != nil {
			common.Error(err)
			return err
		}
		rsp.Data = append(rsp.Data, svcInfo)
	}
	return nil
}
